home *** CD-ROM | disk | FTP | other *** search
/ Aminet 3 / Aminet 3 - July 1994.iso / Aminet / dev / e / makeefile.lha / MakeEFile_and_src / Examples / PModules / astartup / astartup.asm next >
Encoding:
Assembly Source File  |  1994-04-19  |  3.2 KB  |  205 lines

  1. *
  2. * astartup.asm
  3. *
  4. * source pour astartup.bin -> astartup.e
  5. *
  6.     opt l-
  7.     include    exec/types.i
  8.     include    exec/memory.i
  9.     include    exec/exec_lib.i
  10.     include    dos/dosextens.i
  11.     include    dos/dos_lib.i
  12.     include    workbench/startup.i
  13.  
  14.     movem.l    a2-5,-(sp)
  15.     cargs    #16,argptr.l,wbmessage.l,dosbase.l,argcptr.l,argvptr.l,databaseptr.l,errorptr.l
  16.  
  17.  STRUCTURE  SVar,0
  18.     ULONG   sv_Size
  19.     LONG    sv_WbOutput
  20.     ULONG   sv_ArgvBufPtr
  21.     ULONG   sv_MaxArgc
  22.     LABEL   sv_ArgvArray
  23.     LABEL   SV_SIZEOF
  24.  
  25.     movea.l    argptr(sp),a0
  26.     movea.l    (a0),a2        ; a2={arg[]}
  27.     move.l    a2,a0
  28.     moveq    #-1,d0
  29. loop    tst.b    (a0)+
  30.     dbeq    d0,loop
  31.     not.l    d0
  32.     move.l    d0,d2
  33.  
  34.     suba.l    a1,a1
  35.     move.l    4.w,a6
  36.     jsr    _LVOFindTask(a6)
  37.     move.l    d0,a4
  38.  
  39.     move.l    pr_CLI(a4),d0
  40.     bne.s    vcnt
  41.     moveq    #2,d4
  42.     moveq    #8,d2
  43.     bra.s    wbnoargs
  44.  
  45. vcnt    movea.l    a2,a0
  46.     moveq    #3,d4
  47. vcnt1    cmpi.b    #' ',(a0)
  48.     bne.s    vcnt2
  49.     addq.l    #1,d4
  50. vcnt2    tst.b    (a0)+
  51.     bne.s    vcnt1
  52.  
  53. wbnoargs
  54.     move.l    d4,d0
  55.     lsl.l    #2,d0
  56.     move.l    d0,d5
  57.     add.l    d2,d0
  58.     add.l    #SV_SIZEOF+1,d0
  59.  
  60.     move.l    d0,d3
  61.     move.l    #(MEMF_PUBLIC!MEMF_CLEAR),d1
  62.     jsr    _LVOAllocMem(a6)
  63.     tst.l    d0
  64.     bne.s    okMem
  65.     move.l    argcptr(sp),a0
  66.     clr.l    (a0)
  67.     move.l    argvptr(sp),a0
  68.     clr.l    (a0)
  69.     move.l    databaseptr(sp),a0
  70.     clr.l    (a0)
  71.     moveq    #-1,d0
  72.     move.l    errorptr(sp),a0
  73.     move.l    d0,(a0)
  74.     bra    end
  75.  
  76. okMem    move.l    d0,a5
  77.     move.l    d3,(a5)        ; sv_Size
  78.     subq.l    #1,d4
  79.     move.l    d4,sv_MaxArgc(a5)
  80.     lea.l    sv_ArgvArray(a5),a0
  81.     adda.l    d5,a0
  82.     move.l  a0,sv_ArgvBufPtr(a5)
  83.  
  84.     move.l    pr_CLI(a4),d0
  85.     beq    fromWorkbench
  86.  
  87.     lsl.l    #2,d0
  88.     movea.l    d0,a0
  89.     move.l    cli_CommandName(a0),d0
  90.     lsl.l    #2,d0
  91.  
  92.     move.l    sv_ArgvBufPtr(a5),a1
  93.     lea    sv_ArgvArray(a5),a3
  94.  
  95.     move.l    d0,a0
  96.     moveq.l    #0,d0
  97.     move.b    (a0)+,d0
  98.     clr.b    (a0,d0.l)
  99.     move.l    a0,(a3)+
  100.     moveq    #1,d3
  101.  
  102.     lea    (a2,d2.l),a0
  103. stripjunk
  104.     cmp.b    #' ',-(a0)
  105.     dbhi    d2,stripjunk
  106.  
  107.     clr.b    1(a0)
  108.  
  109. newarg    move.b    (a2)+,d1
  110.     beq.s    parmExit
  111.     cmp.b    #' ',d1
  112.     beq.s    newarg
  113.     cmp.b    #9,d1
  114.     beq.s    newarg
  115.  
  116.     cmp.l    sv_MaxArgc(a5),d3
  117.     beq.s    parmExit
  118.  
  119.     move.l    a1,(a3)+
  120.     addq.w    #1,d3
  121.  
  122.     cmp.b    #'"',d1
  123.     beq.s    doquote
  124.  
  125.     move.b    d1,(a1)+
  126.  
  127. nextchar
  128.     move.b    (a2)+,d1
  129.     beq.s    parmExit
  130.     cmp.b    #' ',d1
  131.     beq.s    endarg
  132.  
  133.     move.b    d1,(a1)+
  134.     bra.s    nextchar
  135.  
  136. endarg    clr.b    (a1)+
  137.     bra.s    newarg
  138.  
  139. doquote    move.b    (a2)+,d1
  140.     beq.s    parmExit
  141.     cmp.b    #'"',d1
  142.     beq.s    endarg
  143.  
  144.     cmp.b    #'*',d1
  145.     bne.s    addquotechar
  146.  
  147.     move.b    (a2)+,d1
  148.     move.b    d1,d2
  149.     and.b    #$df,d2         ;d2 is temp toupper'd d1
  150.  
  151.     cmp.b    #'N',d2         ;check for dos newline char
  152.     bne.s    checkEscape
  153.  
  154.     ;--     got a *N -- turn into a newline
  155.     moveq    #10,d1
  156.     bra.s    addquotechar
  157.  
  158. checkEscape
  159.     cmp.b    #'E',d2
  160.     bne.s    addquotechar
  161.  
  162.     ;--     got a *E -- turn into a escape
  163.     moveq    #27,d1
  164.  
  165. addquotechar
  166.     move.b    d1,(a1)+
  167.     bra.s    doquote
  168.  
  169. parmExit
  170.         ;------ all done -- null terminate the arguments
  171.     clr.b    (a1)
  172.     clr.l    (a3)
  173.  
  174.     lea    sv_ArgvArray(a5),a1
  175.     move.l    argvptr(sp),a0
  176.     move.l    a1,(a0)
  177.     move.l    argcptr(sp),a0
  178.     move.l    d3,(a0)
  179.     move.l    databaseptr(sp),a0
  180.     move.l    a5,(a0)
  181.     move.l    errorptr(sp),a0
  182.     clr.l    (a0)
  183.  
  184.     bra.s    end
  185.  
  186. fromWorkbench
  187.     move.l    wbmessage(sp),a2
  188.     move.l    sm_ArgList(a2),d0
  189.     beq.s    1$
  190.     move.l    d0,a0
  191.     move.l    wa_Lock(a0),d1
  192.     move.l    dosbase(sp),a6
  193.     jsr    _LVOCurrentDir(a6)    ; CurrentDir=<program's dir>
  194.  
  195. 1$    move.l    argvptr(sp),a0
  196.     move.l    a2,(a0)            ; _argv=wbmessage
  197.     move.l    argcptr(sp),a0
  198.     clr.l    (a0)            ; _argc=0
  199.     move.l    databaseptr(sp),a0
  200.     clr.l    (a0)
  201.     move.l    errorptr(sp),a0
  202.     clr.l    (a0)            ; pseudo RETURN_OK
  203.  
  204. end    movem.l    (sp)+,a2-5
  205.